February 09, 2021
λ΄κ° μκ°νλ ν μ€ μμ½ : on κ³Ό emit μ ν°ν€ νμΉ΄ μ΄λ€.
Tiqui-Taca barca ?
μ μμ¦μ λ°λ₯΄μ λ‘λλ λ.. μλκΈμ΄κ΅¬λ.. π±
μ¬νΌ κ°μ€νκ³ νν λ¦¬μΌ μμλλ‘ λ°λΌν΄ 보면 socket.io μ μ λΆλ μλ μ§λΌλ μμ£Ό λ―ΈμΈν κΈ°μ΄ μ λλ μ μ μμ§ μμκΉ κΈ°λνλ©° (νμ΄λ? 보ꡬκ³μμ§μ ?π) κ°λ³΄μ¦μ!
μΌλ¨ λΉ λλ ν 리 νλ λ§λ€κ³
μλν°λ₯Ό μ΄λ ν΄μ server.js λ₯Ό μμ± μ΄ν μ무 μ½μλ‘κ·Έλ κ°λ€ μ°μ΄ λκ³
μ μ ν λλ ν 리λ₯Ό νλ λ§λ€κ³ κ±°κΈ°μλ€κ°
npm init -y λ‘ package.json μμ±νκΈ°
npm install express http cors nodemon (package.json μμ nodemon μΌλ‘ start μ 컀맨λλ₯Ό μ§μ ν΄μ€λ€)
const express = require('express')
const cors = require('cors')
// ? create instance of express
const app = express()
// ? allows all CORS
app.use(cors())
// ? use http with instance of express
const http = require('http').createServer(app)
const port = 3000
// ? start the server
http.listen(port, () => {
console.log(`Listening to port ${port}`)
})
λμ΄μμ μμΈν μ€λͺ μ μλ΅ν©λλ€.
λΈλΌμ°μ μμμ localhost:3000 μ Cannot GET / μ΄λΌλ 문ꡬλ₯Ό νμΈν μ μλ€.
app.get('/', (req, res) => {
res.send('Simple GET request!π')
})
μ΄μ localhost:3000 μ μ μνλ©΄ μλ΅μΌλ‘ λ°μ λ¬Έκ΅¬κ° μΆλ ₯λμ΄ μλ κ²μ νμΈν μ μλ€.
socket.io λ₯Ό μ€μΉνλ€. (for serverside)
npm install socket.io
곡μλ¬Έμμλ λμ μμ§λ§ socket.io λ₯Ό μΈ λλ http λͺ¨λκ³Ό express λͺ¨λμ νΌν© μ¬μ©νλ€.
server.js λ΄μ μλ μ½λλ₯Ό http λ³μ μ μΈν λΆλΆ μλμλ€ μμ±νλ€.
// create socket instance with http
const io = require('socket.io')(http)
// add listeners for new connection
// μ€μκ° chat (socket) μ μ¬μ©νλ μ¬μ©μλ₯Ό μν νλΌλ―Έν°, socket
io.on('connection', socket => {
// this is socket for each user
console.log('User connected', socket.id)
// μ΄λ° ν°λ―Έλμμ λ³΄κ² μ§λ§ λ§€λ² μμ²μλ§λ€ socket.id κ° λ€λ₯΄κ² νμΈλλ€.
})
κ°μ 루νΈμ index.html νμΌμ λ§λ λ€.
<!-- socket.io-client λ₯Ό λΆλ¬μ€κ² νλ€. body νκ·Έ λ§μ§λ§μ μμ±ν΄μ -->
<!-- io λͺ¨λμ μ μμ λ
ΈμΆμν€λ μλ―Έ -->
<!-- io λͺ¨λ λ΄ μΈμλ λ°±μλμ μ£Όμ-->
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io('http://localhost:3000')
</script>
μ΄λ κ² μμ±νκ³
server.js λ΄ μ½λμ simple get request λΆλΆμ μλμ κ°μ΄ μμ νλ€.
// ? Create a Simple GET request
app.get('/', (req, res) => {
res.sendFile(__dirname + '/index.html')
})
ν΄λΌμ΄μΈνΈμ μ°κ²°μν€κΈ° μν¨μ΄λ€. 리μ‘νΈμμλ μ΄λ κ² ν νμκ° μλ€. λ μ리
μ΄ν λΈλΌμ°μ (localhost:3000) μ μλ‘κ³ μΉ¨ νλ©΄μ nodemon μΌλ‘ μ€νν ν°λ―Έλμ μ μ¬ν μ΄ν΄λ³΄μ.
βUser connected abcdefb123456cdefgβ λ±μ λ¬Έκ΅¬κ° λμ€λ κ²μ νμΈν μ μλ€. λ€μ μ΄μν λ¬Έμκ° λ°λ‘ socket.id μ΄λ€.
index.html λΆλΆμμ μμ±ν μ½λ μμ λλ²μ§Έ script νκ·Έ λΆλΆ μλμ socket.emit μ΄νμ μ½λλ₯Ό μΆκ°νλ€.
<script>
const socket = io('http://localhost:3000')
socket.emit('new_message', 'Hello, Socket.io!π€')
</script>
sending message from client, also server should listen from each client via itβs socket.
μλ²μμ ν΄λΌμ΄μΈνΈμ μμ²μ λ°μμ£ΌκΈ° μν΄μλ ν΄λΌμ΄μΈνΈμ μμ²μ λ€μ΄μΌ νλ€.
νμ¬λ ν΄λΌμ΄μΈνΈμμ μλ²λ‘ new_message λΌλ νλΌλ―Έν° λ³μλ₯Ό ν΅ν΄ λ©μμ§λ₯Ό μλ²λ‘ μ λ¬νκ³ μ νλ€.
λ°λ‘ μ΄ λ μ°λ μ½λκ° emit μ΄λ€! (λ°μμ μ μν κ²)
ν΄λΌμ΄μΈνΈμμ μλ²λ‘ λ©μμ§λ₯Ό 보λμΌλ, μλ²λ μ΄ λ©μμ§λ₯Ό λ°μ μ€λΉλ₯Ό ν΄μΌ νλ€.
server.js λ΄ μ½λμμ
io.on μΌλ‘ μμνλ κΈ°μ‘΄ μ½λ λ΄ console.log μλμ socket.on μ΄νμ μ½λλ₯Ό μΆκ°ν΄ λ³Έλ€.
io.on(βconnectionβ, (socket) => {
// this is socket for each user
console.log("User connected", socket.id);
socket.on("new_message", (data) => {
console.log("Client says", data);
})
});
μλ²μμ ν΄λΌμ΄μΈνΈμ μμ²μ λ°μμ£ΌκΈ° μν΄μλ ν΄λΌμ΄μΈνΈμ μμ²μ λ€μ΄μΌ νλ€.
κ·Έ λ μ°λ μ½λκ° λ°λ‘ on μ΄λ€!
νλΌλ―Έν°λ‘ λ°μ socket μ κ°μ Έμμ, ν΄λΌμ΄μΈνΈμμ emit μΌλ‘ μμ±ν newmessage μ λ³μλ₯Ό μΌμΉμμΌ μ²«λ²μ§Έ νλΌλ―Έν°μ λ£λλ€. (newmessage)
λλ²μ§Έ νλΌλ―Έν°μ data λ ν΄λΌμ΄μΈνΈμ μμ² λλ²μ§Έ νλΌλ―Έν°μ λ΄κΈ΄ κ°μ μλ―Ένλ€.
μ΄μ ν΄λΌμ΄μΈνΈ (λΈλΌμ°μ ) λ₯Ό μλ‘κ³ μΉ¨ ν΄ μ£Όκ³ nodemon μΌλ‘ μ΄μ΄λμ ν°λ―Έλμ 보면,
βClient says Hello, Socket.io!π€β λΌλ 문ꡬλ₯Ό νμΈ ν μ μμ κ²μ΄λ€.
μ¦, ν΄λΌμ΄μΈνΈμ λ©μμ§λ₯Ό μλ²κ° λ£κ² λ κ²μ΄λ€ (νλλ λ€μΌμ ¨λμ? κ°μ λλ)
νμ¬ μμ±λ μ½λμμ,
console.log μλμ io.emit μ½λλ₯Ό λ€μκ³Ό κ°μ΄ μμ±νλ€.
io.on('connection', socket => {
// this is socket for each user
console.log('User connected', socket.id) // μ΄λ° ν°λ―Έλμμ λ³΄κ² μ§λ§ λ§€λ² μμ²μλ§λ€ socket.id κ° λ€λ₯΄κ² νμΈλλ€.
socket.on('new_message', data => {
console.log('Client says', data)
// ? μ€μΌμ΄ κ·Έ λ€μμ socket.io λ‘ μ°κ²°λ λͺ¨λ ν΄λΌμ΄μΈνΈλ€μκ² μλ²κ° λ©μμ§λ₯Ό 보λ΄κ² ν κ²μ΄λ€.
io.emit('new_message', 'Hello, Clientπ')
})
})
μ μ΄μ μ΄κ±Έ ν΄λΌμ΄μΈνΈκ° λ£κ² νλ €λ©΄?
λ€μ ν΄λΌμ΄μΈνΈ (index.html) λ‘ λμκ°μ .on μΌλ‘ μλ²λ‘λΆν°μ μλ΅μ λ£κ² λ§λ€μ΄μ€μΌ νλ€. κ°μ!
μλμ μΈκΈνλ λ©μμ§λ₯Ό 보λ΄κΈ° (emit), λ©μμ§ μμ²μ λ£κΈ° (on) λΌλ λ΄μ©μ΄ emit κ³Ό on μ ν°ν€ νμΉ΄ λΌλ λ§μ΄ μ΄ν΄κ° μ’ λ κΉμ?π
socket.on μ ν΅ν΄ μλ²μμ μ λ¬ν΄μ£Όλ μλ΅μ λ°λλ€. μμ±ν΄λ³΄μ.
<script>
const socket = io('http://localhost:3000')
socket.emit('new_message', 'Hello, Socket.io!π€')
// client will listen from server
socket.on('new_message', data => {
// localhost:3000 νμ΄μ§ λ΄ κ°λ°μ λꡬ μ°½μμ νμΈν΄ λ³Ό κ²
console.log('Server says', data)
})
</script>
index.html μμ λ μ€ν¬λ¦½νΈ νκ·Έ μ¬μ΄μ form νκ·Έλ‘ μ λ ₯μ°½ λ§λ€μ΄ λμ.
<form onsubmit="return sendMessage()">
<input id="message" placeholder="Enter message" />
<input type="submit" value="Send" />
</form>
λ무 κΈΈλ©΄ μλλ―λ‘ 2λΆμμ λ΅μλ€.π€‘